package corpo;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import corpo.Estabelecimento.TipoDeServico;

public class CarregaArquivos {
    private static HashSet<Estabelecimento> listaEstabelecimentos;
    
    public static void main(String[] args) throws IOException {
		HashSet<Estabelecimento> test1 = lerEstabelecimentos("Estabelecimentos.data");
		HashSet<Usuario> teste = lerUsuarios("opinioes-dos-usuarios-v2.data");
		Repositorio r = new Repositorio(teste, test1);
	}
    
	public static HashSet<Estabelecimento> lerEstabelecimentos(String arquivo)
			throws IOException {
                listaEstabelecimentos = new HashSet<Estabelecimento>();
		BufferedReader in = null;
		try {
			in = new BufferedReader(new FileReader(arquivo));
		} catch (IOException ex) {
			System.err.println("Arquivo nao encontrado");
		}
		String linha;
		while ((linha = in.readLine()) != null) {
			String[] linhaArray = linha.split(";");
			String nomeEstabelecimento = linhaArray[0];
			String endereco = linhaArray[1];
			TipoDeServico tipoServico = TipoDeServico.detectaTipo(linhaArray[2]);
			Estabelecimento novoEstabelecimento = new Estabelecimento(nomeEstabelecimento, endereco, tipoServico);
                        listaEstabelecimentos.add(novoEstabelecimento);
		}
		return listaEstabelecimentos;
	}
	
	public static HashSet<Usuario> lerUsuarios(String arquivo) throws IOException {
		BufferedReader in = null;
		try {
			in = new BufferedReader(new FileReader(arquivo));
		} catch (IOException ex) {
			System.err.println("Arquivo nao encontrado");
		}
		HashMap<Estabelecimento, Integer> novaOpiniao= new HashMap<Estabelecimento, Integer>();
		HashSet<Usuario> listaUsuarios = new HashSet<Usuario>();
		String linha;
		int anonimoX = 1;
		while ((linha = in.readLine()) != null) {
			String[] linhaArray = linha.split(";");
			String emissao = linhaArray[0];
			String nomeUsuario = linhaArray[1];
			int qualidade;
			for (int i = 2, i2 = 0; i < linhaArray.length; i++, i2++) {
                                String[] linhaNota = linhaArray[i].split(":");
                                qualidade = Integer.parseInt(linhaNota[0].trim());
				novaOpiniao.put(getEstabelecimento(i2), qualidade); 
			}
			if (nomeUsuario.isEmpty()) {
				nomeUsuario = "anonimo" + anonimoX;
				anonimoX++;
			}
			Usuario novoUsuario = new Usuario(nomeUsuario, novaOpiniao, converteData(emissao));
			listaUsuarios.add(novoUsuario);	
		}
		return listaUsuarios;
	}
	public static Estabelecimento getEstabelecimento(int index){
		int cont = 0;
		for(Estabelecimento est : listaEstabelecimentos){
			cont++;
			if(cont==index){
				return est;
			}
		}
		return null;
	}
	public static Date converteData(String mydata) {  
		   Date data = null;  
		   try {  
		      DateFormat dtOutput = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");  
		      data = dtOutput.parse(mydata);  
		   }
		   catch (ParseException e) {  
		      e.printStackTrace();  
		   }  
		   return data;  
		}
}
